
package com.jf.cloud.user.service;

import com.jf.cloud.api.user.vo.UserApiVO;
import com.jf.cloud.api.user.vo.UserTagApiVO;
import com.jf.cloud.common.database.dto.PageDTO;
import com.jf.cloud.common.database.vo.PageVO;
import com.jf.cloud.user.dto.UserAdminDTO;
import com.jf.cloud.user.model.UserTagUser;
import com.jf.cloud.user.vo.UserTagUserVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户和标签关联表
 *
 * @author zz
 * @date 2020-12-08 10:16:53
 */
public interface UserTagUserService {

    /**
     * 分页获取用户和标签关联表列表
     * @param pageDTO 分页参数
     * @return 用户和标签关联表列表分页数据
     */
    PageVO<UserTagUserVO> page(PageDTO pageDTO);

    /**
     * 根据用户和标签关联表id获取用户和标签关联表
     *
     * @param userTagUserId 用户和标签关联表id
     * @return 用户和标签关联表
     */
    UserTagUser getByUserTagUserId(Long userTagUserId);

    /**
     * 保存用户和标签关联表
     * @param userTagUser 用户和标签关联表
     */
    void save(UserTagUser userTagUser);

    /**
     * 更新用户和标签关联表
     * @param userTagUser 用户和标签关联表
     */
    void update(UserTagUser userTagUser);

    /**
     * 根据用户和标签关联表id删除用户和标签关联表
     * @param userTagUserId 用户标签关联自增id
     */
    void deleteById(Long userTagUserId);

    /**
     * 通过用户id获取到用户的标签
     * @param userId 用户id
     * @return 标签列表
     */
    List<UserTagApiVO> getUserTagsByUserId(Long userId);

    /**
     * 删除标签和用户的关联关系
     * @param userTagId 标签id
     */
    void removeByUserTagId(Long userTagId);

    /**
     * 批量保存用户关联表信息
     * @param userTagUsers 用户关联标签集合
     * @return 影响行数
     */
    int saveBatch(List<UserTagUser> userTagUsers);

    /**
     * 批量修改会员标签
     * @param userAdminDTO 用户以及标签参数
     * @return 是否修改成功 true是 false否
     */
    boolean batchUpdateUserTag(UserAdminDTO userAdminDTO);

    /**
     * 移除标签通过用户id和标签关联id
     * @param userId 用户id
     * @param userTagId 用户标签关联id
     * @return 结果
     */
    boolean removeByUserIdAndTagId(Long userId, Long userTagId);

    /**
     * 通过标签获取标签下的用户信息
     * @param userTagIds 标签id集合
     * @return 用户列表
     */
    List<UserApiVO> getUserByTagIds(List<Long> userTagIds);

    /**
     * 根据用户标签id删除用户与标签关联关系
     * @param tagId
     */
    void deleteByTagId(Long tagId);

    /**
     * 根据用户id删除用户标签信息
     * @param userId 用户id
     * @return
     */
    void deleteByUserId(@Param("userId") Long userId);
}
